#include "mystring.h"
#include <stdio.h>
char *mystrcpy(char *dst, const char *src)
{
    char *p;
    for(p=dst; *src != '\0'; *p++=*src++);
    *p = '\0';

    return dst;
}

char *mystrcat(char *dst, const char *src)
{
    char *p = dst;
    for(; *p != '\0'; p++); //此循环是将p指针指向dst字符串的结尾

    for(p; *src != '\0'; *p++=*src++);
    *p = '\0';

    return dst;
}

int mystrcmp(const char *dst, const char *src)
{
    for(; *dst==*src && *dst !='\0' && *src!='\0';  dst++, src++);

    //如果碰到了两个字符不相等，则用字符的ＡＳＣＩＩ值相减
    return (*dst != *src)?(*dst - *src):0;
}

int mystrncmp(const char *dst, const char *src, int n)
{
    int i;
    for(i=0; dst[i]==src[i] && dst[i] !='\0' && src[i]!='\0' && i<n;  i++);
    //当i==n的时候，说明前n个字符是相等的
    return i==n?0:(dst[i]-src[i]);
}

char *mystrchr(const char *str, const char c)
{
    for(;*str!='\0'; str++) {
        if(*str == c) {
            return (char *)str;
        }
    }
    return NULL;
}

char *mystrrchr(const char *str, const char c)
{
    const char *p;
    for(p=str;*p != '\0'; p++);

    for(p=p-1; p>=str; p--) {
        if(*p == c) {
            return (char *)p;
        }
    }
    return NULL;
}

// "hello i am mike", "am"
char *mystrstr(const char *str, const char *tok)
{
    char *p;
    int size; //计算子字符串的长度
    for(p=tok; *p != '\0'; *p++);
    size = p-tok;

    for(p=str; *p!='\0'; p++) {
        if(mystrncmp(p, tok, size) == 0) {
            return p;
        }
    }
    return NULL;
}

//"hello  mike\0      "
char *trimstr(char *str)
{
    char *p1, *p2;
    //将p1指针指向到字符串中第一个不为空字符的字符位置
    for(p1 = str; isspace(*p1); p1++);
    //将p2指针指向到字符串结尾\0位置
    for(p2 = p1; *p2 != '\0'; p2++) ;
    for(p2=p2-1; isspace(*p2); p2--);
    *(p2+1) = '\0';//把尾部最后一个非空字符的后面置为\0 p2[1] = '\0'

    if(p1 != str) {
        for(p2=str; *p1 !='\0'; *(p2++) = *(p1++));
        *p2 = '\0';
    }
    return str;
}

char *del_substr(char *str, const char *substr)
{
	int n;
	char *p1, *p2;
	for(p1=substr; *p1 != '\0'; p1++);
	n = p1 - substr;

	for(p1=str, p2=str; *p2 != '\0'; ) {
		if(strncmp(p2, substr, n) == 0) {
			p2 += n;
		}
		else {
			*p1++ = *p2++;
		}
	}
	*p1 = '\0';
	return str;
}
